package com.ocpsoft.socialpm.gwt.client.local.view.project.create;
import javax.enterprise.context.ApplicationScoped;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.ocpsoft.socialpm.gwt.client.local.util.QueryableTimer;
import com.ocpsoft.socialpm.gwt.client.local.view.FixedLayoutView;
import com.ocpsoft.socialpm.gwt.client.local.view.component.HeroPanel;
@ApplicationScoped
public class NewProjectViewImpl extends FixedLayoutView implements NewProjectView
{
final TextBox name = new TextBox();
final TextBox slug = new TextBox();
private final Anchor create = new Anchor("Next ยป");
private Presenter presenter;
public NewProjectViewImpl()
{
super();
}
@Override
public void setup()
{
name.getElement().setAttribute("placeholder", "Project name...");
FormPanel form = new FormPanel();
HeroPanel hero = new HeroPanel();
hero.setHeading("Start a new Project");
hero.setContent("What do you call your project?");
HorizontalPanel panel = new HorizontalPanel();
panel.add(name);
hero.getUnder().add(panel);
create.addStyleName("btn btn-primary btn-large");
hero.addAction(create);
form.add(hero);
content.add(form);
setupInputs();
}
private void setupInputs()
{
final QueryableTimer t = new QueryableTimer() {
String last = null;
@Override
public void performTask()
{
String current = name.getText();
if ((last == null && current != null) || (last != null && current != null && !last.equals(current)))
{
last = current;
presenter.verifyProject(current);
}
}
};
name.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event)
{
if (!t.isRunning())
{
t.scheduleRepeating(500);
}
}
});
name.addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event)
{
if (KeyCodes.KEY_ENTER == event.getCharCode())
{
event.preventDefault();
t.cancel();
presenter.createProject(name.getText());
}
}
});
create.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event)
{
event.preventDefault();
t.cancel();
presenter.createProject(name.getText());
}
});
}
@Override
public Presenter getPresenter()
{
return presenter;
}
@Override
public void setPresenter(Presenter presenter)
{
this.presenter = presenter;
}
@Override
public void focusProjectName()
{
name.setFocus(true);
}
@Override
public void setSubmitEnabled(boolean enabled)
{
create.setEnabled(enabled);
}
@Override
public void clearInputs()
{
name.setText("");
}
}